home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / msacm.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  57.1 KB  |  1,896 lines

  1. //==========================================================================;
  2. //
  3. //  msacm.h
  4. //
  5. //  Copyright (c) 1992-1995 Microsoft Corporation.  All Rights Reserved.
  6. //
  7. //  Description:
  8. //      Audio Compression Manager Public Header File
  9. //
  10. //  History:
  11. //
  12. //==========================================================================;
  13.  
  14. #ifndef _INC_ACM
  15. #define _INC_ACM        /* #defined if msacm.h has been included */
  16. #pragma option push -b
  17.  
  18.  
  19. #if !defined(_INC_MMREG) || (_INC_MMREG < 142)
  20. #ifndef RC_INVOKED
  21. #error MMREG.H version 142 or greater to be included first
  22. #endif
  23. #endif
  24.  
  25. #if defined(WIN32) && !defined(_WIN32)
  26. #ifndef RC_INVOKED
  27. #pragma message("MSACM.H: defining _WIN32 because application defined WIN32")
  28. #endif
  29. #define _WIN32
  30. #endif
  31.  
  32. #if defined(UNICODE) && !defined(_UNICODE)
  33. #ifndef RC_INVOKED
  34. #pragma message("MSACM.H: defining _UNICODE because application defined UNICODE")
  35. #endif
  36. #define _UNICODE
  37. #endif
  38.  
  39. #ifdef __BORLANDC__
  40. #  include <pshpack1.h>
  41. #endif
  42.  
  43. #ifdef __cplusplus
  44. extern "C" {            /* Assume C declarations for C++ */
  45. #endif  /* __cplusplus */
  46.  
  47. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  48. //
  49. //
  50. //
  51. //
  52. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  53.  
  54. #ifndef DRV_MAPPER_PREFERRED_INPUT_GET
  55. #define DRV_MAPPER_PREFERRED_INPUT_GET  (DRV_USER + 0)
  56. #endif
  57.  
  58. #ifndef DRV_MAPPER_PREFERRED_OUTPUT_GET
  59. #define DRV_MAPPER_PREFERRED_OUTPUT_GET (DRV_USER + 2)
  60. #endif
  61.  
  62. #ifndef DRVM_MAPPER_STATUS
  63. #define DRVM_MAPPER_STATUS              (0x2000)
  64. #endif
  65.  
  66. #ifndef WIDM_MAPPER_STATUS
  67. #define WIDM_MAPPER_STATUS              (DRVM_MAPPER_STATUS + 0)
  68. #define WAVEIN_MAPPER_STATUS_DEVICE     0
  69. #define WAVEIN_MAPPER_STATUS_MAPPED     1
  70. #define WAVEIN_MAPPER_STATUS_FORMAT     2
  71. #endif
  72.  
  73. #ifndef WODM_MAPPER_STATUS
  74. #define WODM_MAPPER_STATUS              (DRVM_MAPPER_STATUS + 0)
  75. #define WAVEOUT_MAPPER_STATUS_DEVICE    0
  76. #define WAVEOUT_MAPPER_STATUS_MAPPED    1
  77. #define WAVEOUT_MAPPER_STATUS_FORMAT    2
  78. #endif
  79.  
  80. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  81. //
  82. //
  83. //
  84. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  85.  
  86. #ifdef _WIN32
  87.     #define ACMAPI              WINAPI
  88. #else
  89. #if defined(_WINDLL) || defined(__DLL__)
  90.     #define ACMAPI              _far _pascal _loadds
  91. #else
  92.     #define ACMAPI              _far _pascal
  93. #endif
  94. #endif
  95.  
  96. //--------------------------------------------------------------------------;
  97. //
  98. //  ACM General API's and Defines
  99. //
  100. //
  101. //
  102. //
  103. //--------------------------------------------------------------------------;
  104.  
  105. //
  106. //  there are four types of 'handles' used by the ACM. the first three
  107. //  are unique types that define specific objects:
  108. //
  109. //  HACMDRIVERID: used to _identify_ an ACM driver. this identifier can be
  110. //  used to _open_ the driver for querying details, etc about the driver.
  111. //
  112. //  HACMDRIVER: used to manage a driver (codec, filter, etc). this handle
  113. //  is much like a handle to other media drivers--you use it to send
  114. //  messages to the converter, query for capabilities, etc.
  115. //
  116. //  HACMSTREAM: used to manage a 'stream' (conversion channel) with the
  117. //  ACM. you use a stream handle to convert data from one format/type
  118. //  to another--much like dealing with a file handle.
  119. //
  120. //
  121. //  the fourth handle type is a generic type used on ACM functions that
  122. //  can accept two or more of the above handle types (for example the
  123. //  acmMetrics and acmDriverID functions).
  124. //
  125. //  HACMOBJ: used to identify ACM objects. this handle is used on functions
  126. //  that can accept two or more ACM handle types.
  127. //
  128. DECLARE_HANDLE(HACMDRIVERID);
  129. typedef HACMDRIVERID       *PHACMDRIVERID;
  130. typedef HACMDRIVERID   FAR *LPHACMDRIVERID;
  131.  
  132. DECLARE_HANDLE(HACMDRIVER);
  133. typedef HACMDRIVER         *PHACMDRIVER;
  134. typedef HACMDRIVER     FAR *LPHACMDRIVER;
  135.  
  136. DECLARE_HANDLE(HACMSTREAM);
  137. typedef HACMSTREAM         *PHACMSTREAM;
  138. typedef HACMSTREAM     FAR *LPHACMSTREAM;
  139.  
  140. DECLARE_HANDLE(HACMOBJ);
  141. typedef HACMOBJ            *PHACMOBJ;
  142. typedef HACMOBJ        FAR *LPHACMOBJ;
  143.  
  144. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  145. //
  146. //  ACM Error Codes
  147. //
  148. //  Note that these error codes are specific errors that apply to the ACM
  149. //  directly--general errors are defined as MMSYSERR_*.
  150. //
  151. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  152.  
  153. #ifndef _MMRESULT_
  154. #define _MMRESULT_
  155. typedef UINT                MMRESULT;
  156. #endif
  157.  
  158. #define ACMERR_BASE         (512)
  159. #define ACMERR_NOTPOSSIBLE  (ACMERR_BASE + 0)
  160. #define ACMERR_BUSY         (ACMERR_BASE + 1)
  161. #define ACMERR_UNPREPARED   (ACMERR_BASE + 2)
  162. #define ACMERR_CANCELED     (ACMERR_BASE + 3)
  163.  
  164. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  165. //
  166. //  ACM Window Messages
  167. //
  168. //  These window messages are sent by the ACM or ACM drivers to notify
  169. //  applications of events.
  170. //
  171. //  Note that these window message numbers will also be defined in
  172. //  mmsystem.
  173. //
  174. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  175.  
  176. #define MM_ACM_OPEN         (MM_STREAM_OPEN)  // conversion callback messages
  177. #define MM_ACM_CLOSE        (MM_STREAM_CLOSE)
  178. #define MM_ACM_DONE         (MM_STREAM_DONE)
  179.  
  180. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  181. //
  182. //  acmGetVersion()
  183. //
  184. //  the ACM version is a 32 bit number that is broken into three parts as 
  185. //  follows:
  186. //
  187. //      bits 24 - 31:   8 bit _major_ version number
  188. //      bits 16 - 23:   8 bit _minor_ version number
  189. //      bits  0 - 15:   16 bit build number
  190. //
  191. //  this is then displayed as follows:
  192. //
  193. //      bMajor = (BYTE)(dwVersion >> 24)
  194. //      bMinor = (BYTE)(dwVersion >> 16) & 
  195. //      wBuild = LOWORD(dwVersion)
  196. //
  197. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  198.  
  199. DWORD ACMAPI acmGetVersion
  200. (
  201.     void
  202. );
  203.  
  204. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  205. //
  206. //  acmMetrics()
  207. //
  208. //
  209. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  210.  
  211. MMRESULT ACMAPI acmMetrics
  212. (
  213.     HACMOBJ                 hao,
  214.     UINT                    uMetric,
  215.     LPVOID                  pMetric
  216. );
  217.  
  218. #define ACM_METRIC_COUNT_DRIVERS            1
  219. #define ACM_METRIC_COUNT_CODECS             2
  220. #define ACM_METRIC_COUNT_CONVERTERS         3
  221. #define ACM_METRIC_COUNT_FILTERS            4
  222. #define ACM_METRIC_COUNT_DISABLED           5
  223. #define ACM_METRIC_COUNT_HARDWARE           6
  224. #define ACM_METRIC_COUNT_LOCAL_DRIVERS      20
  225. #define ACM_METRIC_COUNT_LOCAL_CODECS       21
  226. #define ACM_METRIC_COUNT_LOCAL_CONVERTERS   22
  227. #define ACM_METRIC_COUNT_LOCAL_FILTERS      23
  228. #define ACM_METRIC_COUNT_LOCAL_DISABLED     24
  229. #define ACM_METRIC_HARDWARE_WAVE_INPUT      30
  230. #define ACM_METRIC_HARDWARE_WAVE_OUTPUT     31
  231. #define ACM_METRIC_MAX_SIZE_FORMAT          50
  232. #define ACM_METRIC_MAX_SIZE_FILTER          51
  233. #define ACM_METRIC_DRIVER_SUPPORT           100
  234. #define ACM_METRIC_DRIVER_PRIORITY          101
  235.  
  236. //--------------------------------------------------------------------------;
  237. //
  238. //  ACM Drivers
  239. //
  240. //
  241. //
  242. //
  243. //--------------------------------------------------------------------------;
  244.  
  245. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  246. //
  247. //  acmDriverEnum()
  248. //
  249. //
  250. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  251.  
  252. typedef BOOL (CALLBACK *ACMDRIVERENUMCB)
  253. (
  254.     HACMDRIVERID            hadid,
  255.     DWORD                   dwInstance,
  256.     DWORD                   fdwSupport
  257. );
  258.  
  259. MMRESULT ACMAPI acmDriverEnum
  260. (
  261.     ACMDRIVERENUMCB         fnCallback,
  262.     DWORD                   dwInstance,
  263.     DWORD                   fdwEnum
  264. );
  265.  
  266. #define ACM_DRIVERENUMF_NOLOCAL     0x40000000L
  267. #define ACM_DRIVERENUMF_DISABLED    0x80000000L
  268.  
  269. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  270. //
  271. //  acmDriverID()
  272. //
  273. //
  274. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  275.  
  276. MMRESULT ACMAPI acmDriverID
  277. (
  278.     HACMOBJ                 hao,
  279.     LPHACMDRIVERID          phadid,
  280.     DWORD                   fdwDriverID
  281. );
  282.  
  283. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  284. //
  285. //  acmDriverAdd()
  286. //
  287. //
  288. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  289.  
  290. #ifdef _WIN32
  291. MMRESULT ACMAPI acmDriverAddA
  292. (
  293.     LPHACMDRIVERID          phadid,
  294.     HINSTANCE               hinstModule,
  295.     LPARAM                  lParam, 
  296.     DWORD                   dwPriority,
  297.     DWORD                   fdwAdd
  298. );
  299.  
  300. MMRESULT ACMAPI acmDriverAddW
  301. (
  302.     LPHACMDRIVERID          phadid,
  303.     HINSTANCE               hinstModule,
  304.     LPARAM                  lParam, 
  305.     DWORD                   dwPriority,
  306.     DWORD                   fdwAdd
  307. );
  308.  
  309. #ifdef _UNICODE
  310. #define acmDriverAdd        acmDriverAddW
  311. #else
  312. #define acmDriverAdd        acmDriverAddA
  313. #endif
  314. #else
  315. MMRESULT ACMAPI acmDriverAdd
  316. (
  317.     LPHACMDRIVERID          phadid,
  318.     HINSTANCE               hinstModule,
  319.     LPARAM                  lParam, 
  320.     DWORD                   dwPriority,
  321.     DWORD                   fdwAdd
  322. );
  323. #endif
  324.  
  325. #define ACM_DRIVERADDF_FUNCTION     0x00000003L  // lParam is a procedure
  326. #define ACM_DRIVERADDF_NOTIFYHWND   0x00000004L  // lParam is notify hwnd
  327. #define ACM_DRIVERADDF_TYPEMASK     0x00000007L  // driver type mask
  328. #define ACM_DRIVERADDF_LOCAL        0x00000000L  // is local to current task
  329. #define ACM_DRIVERADDF_GLOBAL       0x00000008L  // is global
  330.  
  331. //
  332. //  prototype for ACM driver procedures that are installed as _functions_
  333. //  or _notifations_ instead of as a standalone installable driver.
  334. //
  335. typedef LRESULT (CALLBACK *ACMDRIVERPROC)(DWORD, HACMDRIVERID, UINT, LPARAM, LPARAM);
  336. typedef ACMDRIVERPROC FAR *LPACMDRIVERPROC;
  337.  
  338. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  339. //
  340. //  acmDriverRemove()
  341. //
  342. //
  343. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  344.  
  345. MMRESULT ACMAPI acmDriverRemove
  346. (
  347.     HACMDRIVERID            hadid,
  348.     DWORD                   fdwRemove
  349. );
  350.  
  351. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  352. //
  353. //  acmDriverOpen()
  354. //
  355. //
  356. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  357.  
  358. MMRESULT ACMAPI acmDriverOpen
  359. (
  360.     LPHACMDRIVER            phad, 
  361.     HACMDRIVERID            hadid,
  362.     DWORD                   fdwOpen
  363. );
  364.  
  365. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  366. //
  367. //  acmDriverClose()
  368. //
  369. //
  370. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  371.  
  372. MMRESULT ACMAPI acmDriverClose
  373. (
  374.     HACMDRIVER              had,
  375.     DWORD                   fdwClose
  376. );
  377.  
  378. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  379. //
  380. //  acmDriverMessage()
  381. //
  382. //
  383. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  384.  
  385. LRESULT ACMAPI acmDriverMessage
  386. (
  387.     HACMDRIVER              had,
  388.     UINT                    uMsg, 
  389.     LPARAM                  lParam1,
  390.     LPARAM                  lParam2
  391. );
  392.  
  393. //
  394. //
  395. //
  396. //
  397. #define ACMDM_USER                  (DRV_USER + 0x0000)
  398. #define ACMDM_RESERVED_LOW          (DRV_USER + 0x2000)
  399. #define ACMDM_RESERVED_HIGH         (DRV_USER + 0x2FFF)
  400.  
  401. #define ACMDM_BASE                  ACMDM_RESERVED_LOW
  402.  
  403. #define ACMDM_DRIVER_ABOUT          (ACMDM_BASE + 11)
  404.  
  405. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  406. //
  407. //  acmDriverPriority
  408. //
  409. //
  410. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  411.  
  412. MMRESULT ACMAPI acmDriverPriority
  413. (
  414.     HACMDRIVERID            hadid,
  415.     DWORD                   dwPriority,
  416.     DWORD                   fdwPriority
  417. );
  418.  
  419. #define ACM_DRIVERPRIORITYF_ENABLE      0x00000001L
  420. #define ACM_DRIVERPRIORITYF_DISABLE     0x00000002L
  421. #define ACM_DRIVERPRIORITYF_ABLEMASK    0x00000003L
  422. #define ACM_DRIVERPRIORITYF_BEGIN       0x00010000L
  423. #define ACM_DRIVERPRIORITYF_END         0x00020000L
  424. #define ACM_DRIVERPRIORITYF_DEFERMASK   0x00030000L
  425.  
  426. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  427. //
  428. //  acmDriverDetails()
  429. //
  430. //
  431. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  432.  
  433. //
  434. //  ACMDRIVERDETAILS
  435. //
  436. //  the ACMDRIVERDETAILS structure is used to get various capabilities from
  437. //  an ACM driver (codec, converter, filter).
  438. //
  439. #define ACMDRIVERDETAILS_SHORTNAME_CHARS    32
  440. #define ACMDRIVERDETAILS_LONGNAME_CHARS     128
  441. #define ACMDRIVERDETAILS_COPYRIGHT_CHARS    80
  442. #define ACMDRIVERDETAILS_LICENSING_CHARS    128
  443. #define ACMDRIVERDETAILS_FEATURES_CHARS     512
  444.  
  445. #ifdef _WIN32
  446. typedef struct tACMDRIVERDETAILSA
  447. {
  448.     DWORD           cbStruct;           // number of valid bytes in structure
  449.  
  450.     FOURCC          fccType;            // compressor type 'audc'
  451.     FOURCC          fccComp;            // sub-type (not used; reserved)
  452.  
  453.     WORD            wMid;               // manufacturer id
  454.     WORD            wPid;               // product id
  455.  
  456.     DWORD           vdwACM;             // version of the ACM *compiled* for
  457.     DWORD           vdwDriver;          // version of the driver
  458.  
  459.     DWORD           fdwSupport;         // misc. support flags
  460.     DWORD           cFormatTags;        // total unique format tags supported
  461.     DWORD           cFilterTags;        // total unique filter tags supported
  462.  
  463.     HICON           hicon;              // handle to custom icon
  464.  
  465.     char            szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
  466.     char            szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
  467.     char            szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
  468.     char            szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
  469.     char            szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
  470.  
  471. } ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA, FAR *LPACMDRIVERDETAILSA;
  472.  
  473. typedef struct tACMDRIVERDETAILSW
  474. {
  475.     DWORD           cbStruct;           // number of valid bytes in structure
  476.  
  477.     FOURCC          fccType;            // compressor type 'audc'
  478.     FOURCC          fccComp;            // sub-type (not used; reserved)
  479.  
  480.     WORD            wMid;               // manufacturer id
  481.     WORD            wPid;               // product id
  482.  
  483.     DWORD           vdwACM;             // version of the ACM *compiled* for
  484.     DWORD           vdwDriver;          // version of the driver
  485.  
  486.     DWORD           fdwSupport;         // misc. support flags
  487.     DWORD           cFormatTags;        // total unique format tags supported
  488.     DWORD           cFilterTags;        // total unique filter tags supported
  489.  
  490.     HICON           hicon;              // handle to custom icon
  491.  
  492.     WCHAR           szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
  493.     WCHAR           szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
  494.     WCHAR           szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
  495.     WCHAR           szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
  496.     WCHAR           szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
  497.  
  498. } ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW, FAR *LPACMDRIVERDETAILSW;
  499.  
  500. #ifdef _UNICODE
  501. #define ACMDRIVERDETAILS        ACMDRIVERDETAILSW
  502. #define PACMDRIVERDETAILS       PACMDRIVERDETAILSW
  503. #define LPACMDRIVERDETAILS      LPACMDRIVERDETAILSW
  504. #else
  505. #define ACMDRIVERDETAILS        ACMDRIVERDETAILSA
  506. #define PACMDRIVERDETAILS       PACMDRIVERDETAILSA
  507. #define LPACMDRIVERDETAILS      LPACMDRIVERDETAILSA
  508. #endif
  509. #else
  510. typedef struct tACMDRIVERDETAILS
  511. {
  512.     DWORD           cbStruct;           // number of valid bytes in structure
  513.  
  514.     FOURCC          fccType;            // compressor type 'audc'
  515.     FOURCC          fccComp;            // sub-type (not used; reserved)
  516.  
  517.     WORD            wMid;               // manufacturer id
  518.     WORD            wPid;               // product id
  519.  
  520.     DWORD           vdwACM;             // version of the ACM *compiled* for
  521.     DWORD           vdwDriver;          // version of the driver
  522.  
  523.     DWORD           fdwSupport;         // misc. support flags
  524.     DWORD           cFormatTags;        // total unique format tags supported
  525.     DWORD           cFilterTags;        // total unique filter tags supported
  526.  
  527.     HICON           hicon;              // handle to custom icon
  528.  
  529.     char            szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
  530.     char            szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
  531.     char            szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
  532.     char            szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
  533.     char            szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
  534.  
  535. } ACMDRIVERDETAILS, *PACMDRIVERDETAILS, FAR *LPACMDRIVERDETAILS;
  536. #endif
  537.  
  538. //
  539. //  ACMDRIVERDETAILS.fccType
  540. //
  541. //  ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC: the FOURCC used in the fccType
  542. //  field of the ACMDRIVERDETAILS structure to specify that this is an ACM
  543. //  codec designed for audio.
  544. //
  545. //
  546. //  ACMDRIVERDETAILS.fccComp
  547. //
  548. //  ACMDRIVERDETAILS_FCCCOMP_UNDEFINED: the FOURCC used in the fccComp
  549. //  field of the ACMDRIVERDETAILS structure. this is currently an unused
  550. //  field.
  551. //
  552. #define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a', 'u', 'd', 'c')
  553. #define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED  mmioFOURCC('\0', '\0', '\0', '\0')
  554.  
  555. //
  556. //  the following flags are used to specify the type of conversion(s) that
  557. //  the converter/codec/filter supports. these are placed in the fdwSupport
  558. //  field of the ACMDRIVERDETAILS structure. note that a converter can
  559. //  support one or more of these flags in any combination.
  560. //
  561. //  ACMDRIVERDETAILS_SUPPORTF_CODEC: this flag is set if the driver supports
  562. //  conversions from one format tag to another format tag. for example, if a
  563. //  converter compresses WAVE_FORMAT_PCM to WAVE_FORMAT_ADPCM, then this bit
  564. //  should be set.
  565. //
  566. //  ACMDRIVERDETAILS_SUPPORTF_CONVERTER: this flags is set if the driver
  567. //  supports conversions on the same format tag. as an example, the PCM
  568. //  converter that is built into the ACM sets this bit (and only this bit)
  569. //  because it converts only PCM formats (bits, sample rate).
  570. //
  571. //  ACMDRIVERDETAILS_SUPPORTF_FILTER: this flag is set if the driver supports
  572. //  transformations on a single format. for example, a converter that changed
  573. //  the 'volume' of PCM data would set this bit. 'echo' and 'reverb' are
  574. //  also filter types.
  575. //
  576. //  ACMDRIVERDETAILS_SUPPORTF_HARDWARE: this flag is set if the driver supports
  577. //  hardware input and/or output through a waveform device.
  578. //
  579. //  ACMDRIVERDETAILS_SUPPORTF_ASYNC: this flag is set if the driver supports
  580. //  async conversions.
  581. //
  582. //
  583. //  ACMDRIVERDETAILS_SUPPORTF_LOCAL: this flag is set _by the ACM_ if a
  584. //  driver has been installed local to the current task. this flag is also
  585. //  set in the fdwSupport argument to the enumeration callback function
  586. //  for drivers.
  587. //
  588. //  ACMDRIVERDETAILS_SUPPORTF_DISABLED: this flag is set _by the ACM_ if a
  589. //  driver has been disabled. this flag is also passed set in the fdwSupport
  590. //  argument to the enumeration callback function for drivers.
  591. //
  592. #define ACMDRIVERDETAILS_SUPPORTF_CODEC     0x00000001L
  593. #define ACMDRIVERDETAILS_SUPPORTF_CONVERTER 0x00000002L
  594. #define ACMDRIVERDETAILS_SUPPORTF_FILTER    0x00000004L
  595. #define ACMDRIVERDETAILS_SUPPORTF_HARDWARE  0x00000008L
  596. #define ACMDRIVERDETAILS_SUPPORTF_ASYNC     0x00000010L
  597. #define ACMDRIVERDETAILS_SUPPORTF_LOCAL     0x40000000L
  598. #define ACMDRIVERDETAILS_SUPPORTF_DISABLED  0x80000000L
  599.  
  600. #ifdef _WIN32
  601. MMRESULT ACMAPI acmDriverDetailsA
  602. (
  603.     HACMDRIVERID            hadid,
  604.     LPACMDRIVERDETAILSA     padd,
  605.     DWORD                   fdwDetails
  606. );
  607.  
  608. MMRESULT ACMAPI acmDriverDetailsW
  609. (
  610.     HACMDRIVERID            hadid,
  611.     LPACMDRIVERDETAILSW     padd,
  612.     DWORD                   fdwDetails
  613. );
  614.  
  615. #ifdef _UNICODE
  616. #define acmDriverDetails    acmDriverDetailsW
  617. #else
  618. #define acmDriverDetails    acmDriverDetailsA
  619. #endif
  620. #else
  621. MMRESULT ACMAPI acmDriverDetails
  622. (
  623.     HACMDRIVERID            hadid,
  624.     LPACMDRIVERDETAILS      padd,
  625.     DWORD                   fdwDetails
  626. );
  627. #endif
  628.  
  629.  
  630. //--------------------------------------------------------------------------;
  631. //
  632. //  ACM Format Tags
  633. //
  634. //
  635. //
  636. //
  637. //--------------------------------------------------------------------------;
  638.  
  639. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  640. //
  641. //  acmFormatTagDetails()
  642. //
  643. //
  644. //
  645. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  646.  
  647. #define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48
  648.  
  649. #ifdef _WIN32
  650. typedef struct tACMFORMATTAGDETAILSA
  651. {
  652.     DWORD           cbStruct;
  653.     DWORD           dwFormatTagIndex;
  654.     DWORD           dwFormatTag;
  655.     DWORD           cbFormatSize;
  656.     DWORD           fdwSupport;
  657.     DWORD           cStandardFormats;
  658.     char            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  659.  
  660. } ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA, FAR *LPACMFORMATTAGDETAILSA;
  661.  
  662. typedef struct tACMFORMATTAGDETAILSW
  663. {
  664.     DWORD           cbStruct;
  665.     DWORD           dwFormatTagIndex;
  666.     DWORD           dwFormatTag;
  667.     DWORD           cbFormatSize;
  668.     DWORD           fdwSupport;
  669.     DWORD           cStandardFormats;
  670.     WCHAR           szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  671.  
  672. } ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW, FAR *LPACMFORMATTAGDETAILSW;
  673.  
  674. #ifdef _UNICODE
  675. #define ACMFORMATTAGDETAILS     ACMFORMATTAGDETAILSW
  676. #define PACMFORMATTAGDETAILS    PACMFORMATTAGDETAILSW
  677. #define LPACMFORMATTAGDETAILS   LPACMFORMATTAGDETAILSW
  678. #else
  679. #define ACMFORMATTAGDETAILS     ACMFORMATTAGDETAILSA
  680. #define PACMFORMATTAGDETAILS    PACMFORMATTAGDETAILSA
  681. #define LPACMFORMATTAGDETAILS   LPACMFORMATTAGDETAILSA
  682. #endif
  683. #else
  684. typedef struct tACMFORMATTAGDETAILS
  685. {
  686.     DWORD           cbStruct;
  687.     DWORD           dwFormatTagIndex;
  688.     DWORD           dwFormatTag;
  689.     DWORD           cbFormatSize;
  690.     DWORD           fdwSupport;
  691.     DWORD           cStandardFormats;
  692.     char            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  693.  
  694. } ACMFORMATTAGDETAILS, *PACMFORMATTAGDETAILS, FAR *LPACMFORMATTAGDETAILS;
  695. #endif
  696.  
  697. #ifdef _WIN32
  698. MMRESULT ACMAPI acmFormatTagDetailsA
  699. (
  700.     HACMDRIVER              had,
  701.     LPACMFORMATTAGDETAILSA  paftd,
  702.     DWORD                   fdwDetails
  703. );
  704.  
  705. MMRESULT ACMAPI acmFormatTagDetailsW
  706. (
  707.     HACMDRIVER              had,
  708.     LPACMFORMATTAGDETAILSW  paftd,
  709.     DWORD                   fdwDetails
  710. );
  711.  
  712. #ifdef _UNICODE
  713. #define acmFormatTagDetails     acmFormatTagDetailsW
  714. #else
  715. #define acmFormatTagDetails     acmFormatTagDetailsA
  716. #endif
  717. #else
  718. MMRESULT ACMAPI acmFormatTagDetails
  719. (
  720.     HACMDRIVER              had,
  721.     LPACMFORMATTAGDETAILS   paftd,
  722.     DWORD                   fdwDetails
  723. );
  724. #endif
  725.  
  726. #define ACM_FORMATTAGDETAILSF_INDEX         0x00000000L
  727. #define ACM_FORMATTAGDETAILSF_FORMATTAG     0x00000001L
  728. #define ACM_FORMATTAGDETAILSF_LARGESTSIZE   0x00000002L
  729. #define ACM_FORMATTAGDETAILSF_QUERYMASK     0x0000000FL
  730.  
  731. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  732. //
  733. //  acmFormatTagEnum()
  734. //
  735. //
  736. //
  737. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  738.  
  739. #ifdef _WIN32
  740. typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)
  741. (
  742.     HACMDRIVERID            hadid,
  743.     LPACMFORMATTAGDETAILSA  paftd,
  744.     DWORD                   dwInstance,
  745.     DWORD                   fdwSupport
  746. );
  747.  
  748. MMRESULT ACMAPI acmFormatTagEnumA
  749. (
  750.     HACMDRIVER              had,
  751.     LPACMFORMATTAGDETAILSA  paftd,
  752.     ACMFORMATTAGENUMCBA     fnCallback,
  753.     DWORD                   dwInstance, 
  754.     DWORD                   fdwEnum
  755. );
  756. typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)
  757. (
  758.     HACMDRIVERID            hadid,
  759.     LPACMFORMATTAGDETAILSW  paftd,
  760.     DWORD                   dwInstance,
  761.     DWORD                   fdwSupport
  762. );
  763.  
  764. MMRESULT ACMAPI acmFormatTagEnumW
  765. (
  766.     HACMDRIVER              had,
  767.     LPACMFORMATTAGDETAILSW  paftd,
  768.     ACMFORMATTAGENUMCBW     fnCallback,
  769.     DWORD                   dwInstance, 
  770.     DWORD                   fdwEnum
  771. );
  772.  
  773. #ifdef _UNICODE
  774. #define ACMFORMATTAGENUMCB      ACMFORMATTAGENUMCBW
  775. #define acmFormatTagEnum        acmFormatTagEnumW
  776. #else
  777. #define ACMFORMATTAGENUMCB      ACMFORMATTAGENUMCBA
  778. #define acmFormatTagEnum        acmFormatTagEnumA
  779. #endif
  780. #else
  781. typedef BOOL (CALLBACK *ACMFORMATTAGENUMCB)
  782. (
  783.     HACMDRIVERID            hadid,
  784.     LPACMFORMATTAGDETAILS   paftd,
  785.     DWORD                   dwInstance,
  786.     DWORD                   fdwSupport
  787. );
  788.  
  789. MMRESULT ACMAPI acmFormatTagEnum
  790. (
  791.     HACMDRIVER              had,
  792.     LPACMFORMATTAGDETAILS   paftd,
  793.     ACMFORMATTAGENUMCB      fnCallback,
  794.     DWORD                   dwInstance, 
  795.     DWORD                   fdwEnum
  796. );
  797. #endif
  798.  
  799. //--------------------------------------------------------------------------;
  800. //
  801. //  ACM Formats
  802. //
  803. //
  804. //
  805. //
  806. //--------------------------------------------------------------------------;
  807.  
  808. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  809. //
  810. //  acmFormatDetails()
  811. //
  812. //
  813. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  814.  
  815. #define ACMFORMATDETAILS_FORMAT_CHARS   128
  816.  
  817. #ifdef _WIN32
  818. typedef struct tACMFORMATDETAILSA
  819. {
  820.     DWORD           cbStruct;
  821.     DWORD           dwFormatIndex;
  822.     DWORD           dwFormatTag;
  823.     DWORD           fdwSupport;
  824.     LPWAVEFORMATEX  pwfx;
  825.     DWORD           cbwfx;
  826.     char            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  827.  
  828. } ACMFORMATDETAILSA, *PACMFORMATDETAILSA, FAR *LPACMFORMATDETAILSA;
  829.  
  830. typedef struct tACMFORMATDETAILSW
  831. {
  832.     DWORD           cbStruct;
  833.     DWORD           dwFormatIndex;
  834.     DWORD           dwFormatTag;
  835.     DWORD           fdwSupport;
  836.     LPWAVEFORMATEX  pwfx;
  837.     DWORD           cbwfx;
  838.     WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  839.  
  840. } ACMFORMATDETAILSW, *PACMFORMATDETAILSW, FAR *LPACMFORMATDETAILSW;
  841.  
  842. #ifdef _UNICODE
  843. #define ACMFORMATDETAILS    ACMFORMATDETAILSW
  844. #define PACMFORMATDETAILS   PACMFORMATDETAILSW
  845. #define LPACMFORMATDETAILS  LPACMFORMATDETAILSW
  846. #else
  847. #define ACMFORMATDETAILS    ACMFORMATDETAILSA
  848. #define PACMFORMATDETAILS   PACMFORMATDETAILSA
  849. #define LPACMFORMATDETAILS  LPACMFORMATDETAILSA
  850. #endif
  851. #else
  852. typedef struct tACMFORMATDETAILS
  853. {
  854.     DWORD           cbStruct;
  855.     DWORD           dwFormatIndex;
  856.     DWORD           dwFormatTag;
  857.     DWORD           fdwSupport;
  858.     LPWAVEFORMATEX  pwfx;
  859.     DWORD           cbwfx;
  860.     char            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  861.  
  862. } ACMFORMATDETAILS, *PACMFORMATDETAILS, FAR *LPACMFORMATDETAILS;
  863. #endif
  864.  
  865. #ifdef _WIN32
  866. MMRESULT ACMAPI acmFormatDetailsA
  867. (
  868.     HACMDRIVER              had,
  869.     LPACMFORMATDETAILSA     pafd,
  870.     DWORD                   fdwDetails
  871. );
  872.  
  873. MMRESULT ACMAPI acmFormatDetailsW
  874. (
  875.     HACMDRIVER              had,
  876.     LPACMFORMATDETAILSW     pafd,
  877.     DWORD                   fdwDetails
  878. );
  879.  
  880. #ifdef _UNICODE
  881. #define acmFormatDetails    acmFormatDetailsW
  882. #else
  883. #define acmFormatDetails    acmFormatDetailsA
  884. #endif
  885. #else
  886. MMRESULT ACMAPI acmFormatDetails
  887. (
  888.     HACMDRIVER              had,
  889.     LPACMFORMATDETAILS      pafd,
  890.     DWORD                   fdwDetails
  891. );
  892. #endif
  893.  
  894. #define ACM_FORMATDETAILSF_INDEX        0x00000000L
  895. #define ACM_FORMATDETAILSF_FORMAT       0x00000001L
  896. #define ACM_FORMATDETAILSF_QUERYMASK    0x0000000FL
  897.  
  898. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  899. //
  900. //  acmFormatEnum()
  901. //
  902. //
  903. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  904.  
  905. #ifdef _WIN32
  906. typedef BOOL (CALLBACK *ACMFORMATENUMCBA)
  907. (
  908.     HACMDRIVERID            hadid,
  909.     LPACMFORMATDETAILSA     pafd,
  910.     DWORD                   dwInstance,
  911.     DWORD                   fdwSupport
  912. );
  913.  
  914. MMRESULT ACMAPI acmFormatEnumA
  915. (
  916.     HACMDRIVER              had,
  917.     LPACMFORMATDETAILSA     pafd,
  918.     ACMFORMATENUMCBA        fnCallback,
  919.     DWORD                   dwInstance, 
  920.     DWORD                   fdwEnum
  921. );
  922.  
  923. typedef BOOL (CALLBACK *ACMFORMATENUMCBW)
  924. (
  925.     HACMDRIVERID            hadid,
  926.     LPACMFORMATDETAILSW     pafd,
  927.     DWORD                   dwInstance,
  928.     DWORD                   fdwSupport
  929. );
  930.  
  931. MMRESULT ACMAPI acmFormatEnumW
  932. (
  933.     HACMDRIVER              had,
  934.     LPACMFORMATDETAILSW     pafd,
  935.     ACMFORMATENUMCBW        fnCallback,
  936.     DWORD                   dwInstance, 
  937.     DWORD                   fdwEnum
  938. );
  939.  
  940. #ifdef _UNICODE
  941. #define ACMFORMATENUMCB     ACMFORMATENUMCBW
  942. #define acmFormatEnum       acmFormatEnumW
  943. #else
  944. #define ACMFORMATENUMCB     ACMFORMATENUMCBA
  945. #define acmFormatEnum       acmFormatEnumA
  946. #endif
  947. #else
  948. typedef BOOL (CALLBACK *ACMFORMATENUMCB)
  949. (
  950.     HACMDRIVERID            hadid,
  951.     LPACMFORMATDETAILS      pafd,
  952.     DWORD                   dwInstance,
  953.     DWORD                   fdwSupport
  954. );
  955.  
  956. MMRESULT ACMAPI acmFormatEnum
  957. (
  958.     HACMDRIVER              had,
  959.     LPACMFORMATDETAILS      pafd,
  960.     ACMFORMATENUMCB         fnCallback,
  961.     DWORD                   dwInstance, 
  962.     DWORD                   fdwEnum
  963. );
  964. #endif
  965.  
  966. #define ACM_FORMATENUMF_WFORMATTAG       0x00010000L
  967. #define ACM_FORMATENUMF_NCHANNELS        0x00020000L
  968. #define ACM_FORMATENUMF_NSAMPLESPERSEC   0x00040000L
  969. #define ACM_FORMATENUMF_WBITSPERSAMPLE   0x00080000L
  970. #define ACM_FORMATENUMF_CONVERT          0x00100000L
  971. #define ACM_FORMATENUMF_SUGGEST          0x00200000L
  972. #define ACM_FORMATENUMF_HARDWARE         0x00400000L
  973. #define ACM_FORMATENUMF_INPUT            0x00800000L
  974. #define ACM_FORMATENUMF_OUTPUT           0x01000000L
  975.  
  976. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  977. //
  978. //  acmFormatSuggest()
  979. //
  980. //
  981. //
  982. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  983.  
  984. MMRESULT ACMAPI acmFormatSuggest
  985. (
  986.     HACMDRIVER          had,
  987.     LPWAVEFORMATEX      pwfxSrc,
  988.     LPWAVEFORMATEX      pwfxDst,
  989.     DWORD               cbwfxDst,
  990.     DWORD               fdwSuggest
  991. );
  992.  
  993. #define ACM_FORMATSUGGESTF_WFORMATTAG       0x00010000L
  994. #define ACM_FORMATSUGGESTF_NCHANNELS        0x00020000L
  995. #define ACM_FORMATSUGGESTF_NSAMPLESPERSEC   0x00040000L
  996. #define ACM_FORMATSUGGESTF_WBITSPERSAMPLE   0x00080000L
  997.  
  998. #define ACM_FORMATSUGGESTF_TYPEMASK         0x00FF0000L
  999.  
  1000. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1001. //
  1002. //  acmFormatChoose()
  1003. //
  1004. //
  1005. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1006.  
  1007. #ifdef _WIN32
  1008. #define ACMHELPMSGSTRINGA       "acmchoose_help"
  1009. #define ACMHELPMSGSTRINGW       L"acmchoose_help"
  1010. #define ACMHELPMSGCONTEXTMENUA  "acmchoose_contextmenu"
  1011. #define ACMHELPMSGCONTEXTMENUW  L"acmchoose_contextmenu"
  1012. #define ACMHELPMSGCONTEXTHELPA  "acmchoose_contexthelp"
  1013. #define ACMHELPMSGCONTEXTHELPW  L"acmchoose_contexthelp"
  1014. #ifdef _UNICODE
  1015. #define ACMHELPMSGSTRING        ACMHELPMSGSTRINGW
  1016. #define ACMHELPMSGCONTEXTMENU   ACMHELPMSGCONTEXTMENUW
  1017. #define ACMHELPMSGCONTEXTHELP   ACMHELPMSGCONTEXTHELPW
  1018. #else
  1019. #define ACMHELPMSGSTRING        ACMHELPMSGSTRINGA
  1020. #define ACMHELPMSGCONTEXTMENU   ACMHELPMSGCONTEXTMENUA
  1021. #define ACMHELPMSGCONTEXTHELP   ACMHELPMSGCONTEXTHELPA
  1022. #endif
  1023. #else
  1024. #define ACMHELPMSGSTRING        "acmchoose_help"
  1025. #define ACMHELPMSGCONTEXTMENU   "acmchoose_contextmenu"
  1026. #define ACMHELPMSGCONTEXTHELP   "acmchoose_contexthelp"
  1027. #endif
  1028.  
  1029. //
  1030. //  MM_ACM_FORMATCHOOSE is sent to hook callbacks by the Format Chooser
  1031. //  Dialog...
  1032. //
  1033. #define MM_ACM_FORMATCHOOSE             (0x8000)
  1034.  
  1035. #define FORMATCHOOSE_MESSAGE            0
  1036. #define FORMATCHOOSE_FORMATTAG_VERIFY   (FORMATCHOOSE_MESSAGE+0)
  1037. #define FORMATCHOOSE_FORMAT_VERIFY      (FORMATCHOOSE_MESSAGE+1)
  1038. #define FORMATCHOOSE_CUSTOM_VERIFY      (FORMATCHOOSE_MESSAGE+2)
  1039.  
  1040. #ifdef _WIN32
  1041. typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)
  1042. (
  1043.     HWND                    hwnd,
  1044.     UINT                    uMsg,
  1045.     WPARAM                  wParam,
  1046.     LPARAM                  lParam
  1047. );
  1048.  
  1049. typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)
  1050. (
  1051.     HWND                    hwnd,
  1052.     UINT                    uMsg,
  1053.     WPARAM                  wParam,
  1054.     LPARAM                  lParam
  1055. );
  1056.  
  1057. #ifdef _UNICODE
  1058. #define ACMFORMATCHOOSEHOOKPROC     ACMFORMATCHOOSEHOOKPROCW
  1059. #else
  1060. #define ACMFORMATCHOOSEHOOKPROC     ACMFORMATCHOOSEHOOKPROCA
  1061. #endif
  1062. #else
  1063. typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROC)
  1064. (
  1065.     HWND                    hwnd,
  1066.     UINT                    uMsg,
  1067.     WPARAM                  wParam,
  1068.     LPARAM                  lParam
  1069. );
  1070. #endif
  1071.  
  1072. //
  1073. //
  1074. //
  1075. //
  1076. #ifdef _WIN32
  1077. typedef struct tACMFORMATCHOOSEA
  1078. {
  1079.     DWORD           cbStruct;           // sizeof(ACMFORMATCHOOSE)
  1080.     DWORD           fdwStyle;           // chooser style flags
  1081.     
  1082.     HWND            hwndOwner;          // caller's window handle
  1083.  
  1084.     LPWAVEFORMATEX  pwfx;               // ptr to wfx buf to receive choice
  1085.     DWORD           cbwfx;              // size of mem buf for pwfx
  1086.     LPCSTR          pszTitle;           // dialog box title bar
  1087.     
  1088.     char            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  1089.     char            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];    
  1090.  
  1091.     LPSTR           pszName;            // custom name selection
  1092.     DWORD           cchName;            // size in chars of mem buf for pszName
  1093.  
  1094.     DWORD           fdwEnum;            // format enumeration restrictions
  1095.     LPWAVEFORMATEX  pwfxEnum;           // format describing restrictions
  1096.     
  1097.     HINSTANCE       hInstance;          // app instance containing dlg template
  1098.     LPCSTR          pszTemplateName;    // custom template name
  1099.     LPARAM          lCustData;          // data passed to hook fn.
  1100.     ACMFORMATCHOOSEHOOKPROCA pfnHook;   // ptr to hook function
  1101.  
  1102. } ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA, FAR *LPACMFORMATCHOOSEA;
  1103.  
  1104. typedef struct tACMFORMATCHOOSEW
  1105. {
  1106.     DWORD           cbStruct;           // sizeof(ACMFORMATCHOOSE)
  1107.     DWORD           fdwStyle;           // chooser style flags
  1108.     
  1109.     HWND            hwndOwner;          // caller's window handle
  1110.  
  1111.     LPWAVEFORMATEX  pwfx;               // ptr to wfx buf to receive choice
  1112.     DWORD           cbwfx;              // size of mem buf for pwfx
  1113.     LPCWSTR         pszTitle;           // dialog box title bar
  1114.     
  1115.     WCHAR           szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  1116.     WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];    
  1117.  
  1118.     LPWSTR          pszName;            // custom name selection
  1119.     DWORD           cchName;            // size in chars of mem buf for pszName
  1120.  
  1121.     DWORD           fdwEnum;            // format enumeration restrictions
  1122.     LPWAVEFORMATEX  pwfxEnum;           // format describing restrictions
  1123.     
  1124.     HINSTANCE       hInstance;          // app instance containing dlg template
  1125.     LPCWSTR         pszTemplateName;    // custom template name
  1126.     LPARAM          lCustData;          // data passed to hook fn.
  1127.     ACMFORMATCHOOSEHOOKPROCW pfnHook;   // ptr to hook function
  1128.  
  1129. } ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW, FAR *LPACMFORMATCHOOSEW;
  1130.  
  1131. #ifdef _UNICODE
  1132. #define ACMFORMATCHOOSE     ACMFORMATCHOOSEW
  1133. #define PACMFORMATCHOOSE    PACMFORMATCHOOSEW
  1134. #define LPACMFORMATCHOOSE   LPACMFORMATCHOOSEW
  1135. #else
  1136. #define ACMFORMATCHOOSE     ACMFORMATCHOOSEA
  1137. #define PACMFORMATCHOOSE    PACMFORMATCHOOSEA
  1138. #define LPACMFORMATCHOOSE   LPACMFORMATCHOOSEA
  1139. #endif
  1140. #else
  1141. typedef struct tACMFORMATCHOOSE
  1142. {
  1143.     DWORD           cbStruct;           // sizeof(ACMFORMATCHOOSE)
  1144.     DWORD           fdwStyle;           // chooser style flags
  1145.     
  1146.     HWND            hwndOwner;          // caller's window handle
  1147.  
  1148.     LPWAVEFORMATEX  pwfx;               // ptr to wfx buf to receive choice
  1149.     DWORD           cbwfx;              // size of mem buf for pwfx
  1150.     LPCSTR          pszTitle;           // dialog box title bar
  1151.     
  1152.     char            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  1153.     char            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];    
  1154.  
  1155.     LPSTR           pszName;            // custom name selection
  1156.     DWORD           cchName;            // size in chars of mem buf for pszName
  1157.  
  1158.     DWORD           fdwEnum;            // format enumeration restrictions
  1159.     LPWAVEFORMATEX  pwfxEnum;           // format describing restrictions
  1160.     
  1161.     HINSTANCE       hInstance;          // app instance containing dlg template
  1162.     LPCSTR          pszTemplateName;    // custom template name
  1163.     LPARAM          lCustData;          // data passed to hook fn.
  1164.     ACMFORMATCHOOSEHOOKPROC pfnHook;    // ptr to hook function
  1165.  
  1166. } ACMFORMATCHOOSE, *PACMFORMATCHOOSE, FAR *LPACMFORMATCHOOSE;
  1167. #endif
  1168.  
  1169. //
  1170. //  ACMFORMATCHOOSE.fdwStyle
  1171. //
  1172. //
  1173. //
  1174. #define ACMFORMATCHOOSE_STYLEF_SHOWHELP              0x00000004L
  1175. #define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK            0x00000008L
  1176. #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE        0x00000010L
  1177. #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE  0x00000020L
  1178. #define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT       0x00000040L
  1179. #define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP           0x00000080L
  1180.  
  1181. #ifdef _WIN32
  1182. MMRESULT ACMAPI acmFormatChooseA
  1183. (
  1184.     LPACMFORMATCHOOSEA      pafmtc
  1185. );
  1186.  
  1187. MMRESULT ACMAPI acmFormatChooseW
  1188. (
  1189.     LPACMFORMATCHOOSEW      pafmtc
  1190. );
  1191.  
  1192. #ifdef _UNICODE
  1193. #define acmFormatChoose     acmFormatChooseW
  1194. #else
  1195. #define acmFormatChoose     acmFormatChooseA
  1196. #endif
  1197. #else
  1198. MMRESULT ACMAPI acmFormatChoose
  1199. (
  1200.     LPACMFORMATCHOOSE       pafmtc
  1201. );
  1202. #endif
  1203.  
  1204. //--------------------------------------------------------------------------;
  1205. //
  1206. //  ACM Filter Tags
  1207. //
  1208. //
  1209. //
  1210. //
  1211. //--------------------------------------------------------------------------;
  1212.  
  1213. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1214. //
  1215. //  acmFilterTagDetails()
  1216. //
  1217. //
  1218. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1219.  
  1220. #define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48
  1221.  
  1222. #ifdef _WIN32
  1223. typedef struct tACMFILTERTAGDETAILSA
  1224. {
  1225.     DWORD           cbStruct;
  1226.     DWORD           dwFilterTagIndex;
  1227.     DWORD           dwFilterTag;
  1228.     DWORD           cbFilterSize;
  1229.     DWORD           fdwSupport;
  1230.     DWORD           cStandardFilters;
  1231.     char            szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1232.  
  1233. } ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA, FAR *LPACMFILTERTAGDETAILSA;
  1234.  
  1235. typedef struct tACMFILTERTAGDETAILSW
  1236. {
  1237.     DWORD           cbStruct;
  1238.     DWORD           dwFilterTagIndex;
  1239.     DWORD           dwFilterTag;
  1240.     DWORD           cbFilterSize;
  1241.     DWORD           fdwSupport;
  1242.     DWORD           cStandardFilters;
  1243.     WCHAR           szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1244.  
  1245. } ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW, FAR *LPACMFILTERTAGDETAILSW;
  1246.  
  1247. #ifdef _UNICODE
  1248. #define ACMFILTERTAGDETAILS     ACMFILTERTAGDETAILSW
  1249. #define PACMFILTERTAGDETAILS    PACMFILTERTAGDETAILSW
  1250. #define LPACMFILTERTAGDETAILS   LPACMFILTERTAGDETAILSW
  1251. #else
  1252. #define ACMFILTERTAGDETAILS     ACMFILTERTAGDETAILSA
  1253. #define PACMFILTERTAGDETAILS    PACMFILTERTAGDETAILSA
  1254. #define LPACMFILTERTAGDETAILS   LPACMFILTERTAGDETAILSA
  1255. #endif
  1256. #else
  1257. typedef struct tACMFILTERTAGDETAILS
  1258. {
  1259.     DWORD           cbStruct;
  1260.     DWORD           dwFilterTagIndex;
  1261.     DWORD           dwFilterTag;
  1262.     DWORD           cbFilterSize;
  1263.     DWORD           fdwSupport;
  1264.     DWORD           cStandardFilters;
  1265.     char            szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1266.  
  1267. } ACMFILTERTAGDETAILS, *PACMFILTERTAGDETAILS, FAR *LPACMFILTERTAGDETAILS;
  1268. #endif
  1269.  
  1270. #ifdef _WIN32
  1271. MMRESULT ACMAPI acmFilterTagDetailsA
  1272. (
  1273.     HACMDRIVER              had,
  1274.     LPACMFILTERTAGDETAILSA  paftd,
  1275.     DWORD                   fdwDetails
  1276. );
  1277.  
  1278. MMRESULT ACMAPI acmFilterTagDetailsW
  1279. (
  1280.     HACMDRIVER              had,
  1281.     LPACMFILTERTAGDETAILSW  paftd,
  1282.     DWORD                   fdwDetails
  1283. );
  1284.  
  1285. #ifdef _UNICODE
  1286. #define acmFilterTagDetails     acmFilterTagDetailsW
  1287. #else
  1288. #define acmFilterTagDetails     acmFilterTagDetailsA
  1289. #endif
  1290. #else
  1291. MMRESULT ACMAPI acmFilterTagDetails
  1292. (
  1293.     HACMDRIVER              had,
  1294.     LPACMFILTERTAGDETAILS   paftd,
  1295.     DWORD                   fdwDetails
  1296. );
  1297. #endif
  1298.  
  1299. #define ACM_FILTERTAGDETAILSF_INDEX         0x00000000L
  1300. #define ACM_FILTERTAGDETAILSF_FILTERTAG     0x00000001L
  1301. #define ACM_FILTERTAGDETAILSF_LARGESTSIZE   0x00000002L
  1302. #define ACM_FILTERTAGDETAILSF_QUERYMASK     0x0000000FL
  1303.  
  1304. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1305. //
  1306. //  acmFilterTagEnum()
  1307. //
  1308. //
  1309. //
  1310. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1311.  
  1312. #ifdef _WIN32
  1313. typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)
  1314. (
  1315.     HACMDRIVERID            hadid,
  1316.     LPACMFILTERTAGDETAILSA  paftd,
  1317.     DWORD                   dwInstance,
  1318.     DWORD                   fdwSupport
  1319. );
  1320.  
  1321. MMRESULT ACMAPI acmFilterTagEnumA
  1322. (
  1323.     HACMDRIVER              had,
  1324.     LPACMFILTERTAGDETAILSA  paftd,
  1325.     ACMFILTERTAGENUMCBA     fnCallback,
  1326.     DWORD                   dwInstance, 
  1327.     DWORD                   fdwEnum
  1328. );
  1329.  
  1330. typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)
  1331. (
  1332.     HACMDRIVERID            hadid,
  1333.     LPACMFILTERTAGDETAILSW  paftd,
  1334.     DWORD                   dwInstance,
  1335.     DWORD                   fdwSupport
  1336. );
  1337.  
  1338. MMRESULT ACMAPI acmFilterTagEnumW
  1339. (
  1340.     HACMDRIVER              had,
  1341.     LPACMFILTERTAGDETAILSW  paftd,
  1342.     ACMFILTERTAGENUMCBW     fnCallback,
  1343.     DWORD                   dwInstance, 
  1344.     DWORD                   fdwEnum
  1345. );
  1346.  
  1347. #ifdef _UNICODE
  1348. #define ACMFILTERTAGENUMCB  ACMFILTERTAGENUMCBW
  1349. #define acmFilterTagEnum    acmFilterTagEnumW
  1350. #else
  1351. #define ACMFILTERTAGENUMCB  ACMFILTERTAGENUMCBA
  1352. #define acmFilterTagEnum    acmFilterTagEnumA
  1353. #endif
  1354. #else
  1355. typedef BOOL (CALLBACK *ACMFILTERTAGENUMCB)
  1356. (
  1357.     HACMDRIVERID            hadid,
  1358.     LPACMFILTERTAGDETAILS   paftd,
  1359.     DWORD                   dwInstance,
  1360.     DWORD                   fdwSupport
  1361. );
  1362.  
  1363. MMRESULT ACMAPI acmFilterTagEnum
  1364. (
  1365.     HACMDRIVER              had,
  1366.     LPACMFILTERTAGDETAILS   paftd,
  1367.     ACMFILTERTAGENUMCB      fnCallback,
  1368.     DWORD                   dwInstance, 
  1369.     DWORD                   fdwEnum
  1370. );
  1371. #endif
  1372.  
  1373. //--------------------------------------------------------------------------;
  1374. //
  1375. //  ACM Filters
  1376. //
  1377. //
  1378. //
  1379. //
  1380. //--------------------------------------------------------------------------;
  1381.  
  1382. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1383. //
  1384. //  acmFilterDetails()
  1385. //
  1386. //
  1387. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1388.  
  1389. #define ACMFILTERDETAILS_FILTER_CHARS   128
  1390.  
  1391. #ifdef _WIN32
  1392. typedef struct tACMFILTERDETAILSA
  1393. {
  1394.     DWORD           cbStruct;
  1395.     DWORD           dwFilterIndex;
  1396.     DWORD           dwFilterTag;
  1397.     DWORD           fdwSupport;
  1398.     LPWAVEFILTER    pwfltr;
  1399.     DWORD           cbwfltr;
  1400.     char            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1401.  
  1402. } ACMFILTERDETAILSA, *PACMFILTERDETAILSA, FAR *LPACMFILTERDETAILSA;
  1403.  
  1404. typedef struct tACMFILTERDETAILSW
  1405. {
  1406.     DWORD           cbStruct;
  1407.     DWORD           dwFilterIndex;
  1408.     DWORD           dwFilterTag;
  1409.     DWORD           fdwSupport;
  1410.     LPWAVEFILTER    pwfltr;
  1411.     DWORD           cbwfltr;
  1412.     WCHAR           szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1413.  
  1414. } ACMFILTERDETAILSW, *PACMFILTERDETAILSW, FAR *LPACMFILTERDETAILSW;
  1415.  
  1416. #ifdef _UNICODE
  1417. #define ACMFILTERDETAILS    ACMFILTERDETAILSW
  1418. #define PACMFILTERDETAILS   PACMFILTERDETAILSW
  1419. #define LPACMFILTERDETAILS  LPACMFILTERDETAILSW
  1420. #else
  1421. #define ACMFILTERDETAILS    ACMFILTERDETAILSA
  1422. #define PACMFILTERDETAILS   PACMFILTERDETAILSA
  1423. #define LPACMFILTERDETAILS  LPACMFILTERDETAILSA
  1424. #endif
  1425. #else
  1426. typedef struct tACMFILTERDETAILS
  1427. {
  1428.     DWORD           cbStruct;
  1429.     DWORD           dwFilterIndex;
  1430.     DWORD           dwFilterTag;
  1431.     DWORD           fdwSupport;
  1432.     LPWAVEFILTER    pwfltr;
  1433.     DWORD           cbwfltr;
  1434.     char            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1435.  
  1436. } ACMFILTERDETAILS, *PACMFILTERDETAILS, FAR *LPACMFILTERDETAILS;
  1437. #endif
  1438.  
  1439. #ifdef _WIN32
  1440. MMRESULT ACMAPI acmFilterDetailsA
  1441. (
  1442.     HACMDRIVER              had,
  1443.     LPACMFILTERDETAILSA     pafd,
  1444.     DWORD                   fdwDetails
  1445. );
  1446.  
  1447. MMRESULT ACMAPI acmFilterDetailsW
  1448. (
  1449.     HACMDRIVER              had,
  1450.     LPACMFILTERDETAILSW     pafd,
  1451.     DWORD                   fdwDetails
  1452. );
  1453. #ifdef _UNICODE
  1454. #define acmFilterDetails    acmFilterDetailsW
  1455. #else
  1456. #define acmFilterDetails    acmFilterDetailsA
  1457. #endif
  1458. #else
  1459. MMRESULT ACMAPI acmFilterDetails
  1460. (
  1461.     HACMDRIVER              had,
  1462.     LPACMFILTERDETAILS      pafd,
  1463.     DWORD                   fdwDetails
  1464. );
  1465. #endif
  1466.  
  1467. #define ACM_FILTERDETAILSF_INDEX        0x00000000L
  1468. #define ACM_FILTERDETAILSF_FILTER       0x00000001L
  1469. #define ACM_FILTERDETAILSF_QUERYMASK    0x0000000FL
  1470.  
  1471. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1472. //
  1473. //  acmFilterEnum()
  1474. //
  1475. //
  1476. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1477.  
  1478. #ifdef _WIN32
  1479. typedef BOOL (CALLBACK *ACMFILTERENUMCBA)
  1480. (
  1481.     HACMDRIVERID            hadid,
  1482.     LPACMFILTERDETAILSA     pafd,
  1483.     DWORD                   dwInstance,
  1484.     DWORD                   fdwSupport
  1485. );
  1486.  
  1487. MMRESULT ACMAPI acmFilterEnumA
  1488. (
  1489.     HACMDRIVER              had,
  1490.     LPACMFILTERDETAILSA     pafd,
  1491.     ACMFILTERENUMCBA        fnCallback,
  1492.     DWORD                   dwInstance, 
  1493.     DWORD                   fdwEnum
  1494. );
  1495.  
  1496. typedef BOOL (CALLBACK *ACMFILTERENUMCBW)
  1497. (
  1498.     HACMDRIVERID            hadid,
  1499.     LPACMFILTERDETAILSW     pafd,
  1500.     DWORD                   dwInstance,
  1501.     DWORD                   fdwSupport
  1502. );
  1503.  
  1504. MMRESULT ACMAPI acmFilterEnumW
  1505. (
  1506.     HACMDRIVER              had,
  1507.     LPACMFILTERDETAILSW     pafd,
  1508.     ACMFILTERENUMCBW        fnCallback,
  1509.     DWORD                   dwInstance, 
  1510.     DWORD                   fdwEnum
  1511. );
  1512.  
  1513. #ifdef _UNICODE
  1514. #define ACMFILTERENUMCB     ACMFILTERENUMCBW
  1515. #define acmFilterEnum       acmFilterEnumW
  1516. #else
  1517. #define ACMFILTERENUMCB     ACMFILTERENUMCBA
  1518. #define acmFilterEnum       acmFilterEnumA
  1519. #endif
  1520. #else
  1521. typedef BOOL (CALLBACK *ACMFILTERENUMCB)
  1522. (
  1523.     HACMDRIVERID            hadid,
  1524.     LPACMFILTERDETAILS      pafd,
  1525.     DWORD                   dwInstance,
  1526.     DWORD                   fdwSupport
  1527. );
  1528.  
  1529. MMRESULT ACMAPI acmFilterEnum
  1530. (
  1531.     HACMDRIVER              had,
  1532.     LPACMFILTERDETAILS      pafd,
  1533.     ACMFILTERENUMCB         fnCallback,
  1534.     DWORD                   dwInstance, 
  1535.     DWORD                   fdwEnum
  1536. );
  1537. #endif
  1538.  
  1539. #define ACM_FILTERENUMF_DWFILTERTAG         0x00010000L
  1540.  
  1541. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1542. //
  1543. //  acmFilterChoose()
  1544. //
  1545. //
  1546. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1547.  
  1548. //
  1549. //  MM_ACM_FILTERCHOOSE is sent to hook callbacks by the Filter Chooser
  1550. //  Dialog...
  1551. //
  1552. #define MM_ACM_FILTERCHOOSE             (0x8000)
  1553.  
  1554. #define FILTERCHOOSE_MESSAGE            0
  1555. #define FILTERCHOOSE_FILTERTAG_VERIFY   (FILTERCHOOSE_MESSAGE+0)
  1556. #define FILTERCHOOSE_FILTER_VERIFY      (FILTERCHOOSE_MESSAGE+1)
  1557. #define FILTERCHOOSE_CUSTOM_VERIFY      (FILTERCHOOSE_MESSAGE+2)
  1558.  
  1559. #ifdef _WIN32
  1560. typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)
  1561. (
  1562.     HWND                    hwnd,
  1563.     UINT                    uMsg,
  1564.     WPARAM                  wParam,
  1565.     LPARAM                  lParam
  1566. );
  1567.  
  1568. typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)
  1569. (
  1570.     HWND                    hwnd,
  1571.     UINT                    uMsg,
  1572.     WPARAM                  wParam,
  1573.     LPARAM                  lParam
  1574. );
  1575.  
  1576. #ifdef _UNICODE
  1577. #define ACMFILTERCHOOSEHOOKPROC     ACMFILTERCHOOSEHOOKPROCW
  1578. #else
  1579. #define ACMFILTERCHOOSEHOOKPROC     ACMFILTERCHOOSEHOOKPROCA
  1580. #endif
  1581. #else
  1582. typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROC)
  1583. (
  1584.     HWND                    hwnd,
  1585.     UINT                    uMsg,
  1586.     WPARAM                  wParam,
  1587.     LPARAM                  lParam
  1588. );
  1589. #endif
  1590.  
  1591. //
  1592. //  ACMFILTERCHOOSE
  1593. //
  1594. //
  1595. #ifdef _WIN32
  1596. typedef struct tACMFILTERCHOOSEA
  1597. {
  1598.     DWORD           cbStruct;           // sizeof(ACMFILTERCHOOSE)
  1599.     DWORD           fdwStyle;           // chooser style flags
  1600.  
  1601.     HWND            hwndOwner;          // caller's window handle
  1602.  
  1603.     LPWAVEFILTER    pwfltr;             // ptr to wfltr buf to receive choice
  1604.     DWORD           cbwfltr;            // size of mem buf for pwfltr
  1605.  
  1606.     LPCSTR          pszTitle;
  1607.  
  1608.     char            szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1609.     char            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1610.     LPSTR           pszName;            // custom name selection
  1611.     DWORD           cchName;            // size in chars of mem buf for pszName
  1612.  
  1613.     DWORD           fdwEnum;            // filter enumeration restrictions
  1614.     LPWAVEFILTER    pwfltrEnum;         // filter describing restrictions
  1615.     
  1616.     HINSTANCE       hInstance;          // app instance containing dlg template
  1617.     LPCSTR          pszTemplateName;    // custom template name
  1618.     LPARAM          lCustData;          // data passed to hook fn.
  1619.     ACMFILTERCHOOSEHOOKPROCA pfnHook;    // ptr to hook function
  1620.  
  1621. } ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA, FAR *LPACMFILTERCHOOSEA;
  1622.  
  1623. typedef struct tACMFILTERCHOOSEW
  1624. {
  1625.     DWORD           cbStruct;           // sizeof(ACMFILTERCHOOSE)
  1626.     DWORD           fdwStyle;           // chooser style flags
  1627.  
  1628.     HWND            hwndOwner;          // caller's window handle
  1629.  
  1630.     LPWAVEFILTER    pwfltr;             // ptr to wfltr buf to receive choice
  1631.     DWORD           cbwfltr;            // size of mem buf for pwfltr
  1632.  
  1633.     LPCWSTR         pszTitle;
  1634.  
  1635.     WCHAR           szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1636.     WCHAR           szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1637.     LPWSTR          pszName;            // custom name selection
  1638.     DWORD           cchName;            // size in chars of mem buf for pszName
  1639.  
  1640.     DWORD           fdwEnum;            // filter enumeration restrictions
  1641.     LPWAVEFILTER    pwfltrEnum;         // filter describing restrictions
  1642.     
  1643.     HINSTANCE       hInstance;          // app instance containing dlg template
  1644.     LPCWSTR         pszTemplateName;    // custom template name
  1645.     LPARAM          lCustData;          // data passed to hook fn.
  1646.     ACMFILTERCHOOSEHOOKPROCW pfnHook;    // ptr to hook function
  1647.  
  1648. } ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW, FAR *LPACMFILTERCHOOSEW;
  1649.  
  1650. #ifdef _UNICODE
  1651. #define ACMFILTERCHOOSE     ACMFILTERCHOOSEW
  1652. #define PACMFILTERCHOOSE    PACMFILTERCHOOSEW
  1653. #define LPACMFILTERCHOOSE   LPACMFILTERCHOOSEW
  1654. #else
  1655. #define ACMFILTERCHOOSE     ACMFILTERCHOOSEA
  1656. #define PACMFILTERCHOOSE    PACMFILTERCHOOSEA
  1657. #define LPACMFILTERCHOOSE   LPACMFILTERCHOOSEA
  1658. #endif
  1659. #else
  1660. typedef struct tACMFILTERCHOOSE
  1661. {
  1662.     DWORD           cbStruct;           // sizeof(ACMFILTERCHOOSE)
  1663.     DWORD           fdwStyle;           // chooser style flags
  1664.  
  1665.     HWND            hwndOwner;          // caller's window handle
  1666.  
  1667.     LPWAVEFILTER    pwfltr;             // ptr to wfltr buf to receive choice
  1668.     DWORD           cbwfltr;            // size of mem buf for pwfltr
  1669.  
  1670.     LPCSTR          pszTitle;
  1671.  
  1672.     char            szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1673.     char            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1674.     LPSTR           pszName;            // custom name selection
  1675.     DWORD           cchName;            // size in chars of mem buf for pszName
  1676.  
  1677.     DWORD           fdwEnum;            // filter enumeration restrictions
  1678.     LPWAVEFILTER    pwfltrEnum;         // filter describing restrictions
  1679.     
  1680.     HINSTANCE       hInstance;          // app instance containing dlg template
  1681.     LPCSTR          pszTemplateName;    // custom template name
  1682.     LPARAM          lCustData;          // data passed to hook fn.
  1683.     ACMFILTERCHOOSEHOOKPROC pfnHook;    // ptr to hook function
  1684.  
  1685. } ACMFILTERCHOOSE, *PACMFILTERCHOOSE, FAR *LPACMFILTERCHOOSE;
  1686. #endif
  1687.  
  1688. //
  1689. //  ACMFILTERCHOOSE.fdwStyle
  1690. //
  1691. //
  1692. #define ACMFILTERCHOOSE_STYLEF_SHOWHELP              0x00000004L
  1693. #define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK            0x00000008L
  1694. #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE        0x00000010L
  1695. #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE  0x00000020L
  1696. #define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT    0x00000040L
  1697. #define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP           0x00000080L
  1698.  
  1699. #ifdef _WIN32
  1700. MMRESULT ACMAPI acmFilterChooseA
  1701. (
  1702.     LPACMFILTERCHOOSEA      pafltrc
  1703. );
  1704.  
  1705. MMRESULT ACMAPI acmFilterChooseW
  1706. (
  1707.     LPACMFILTERCHOOSEW      pafltrc
  1708. );
  1709.  
  1710. #ifdef _UNICODE
  1711. #define acmFilterChoose     acmFilterChooseW
  1712. #else
  1713. #define acmFilterChoose     acmFilterChooseA
  1714. #endif
  1715. #else
  1716. MMRESULT ACMAPI acmFilterChoose
  1717. (
  1718.     LPACMFILTERCHOOSE       pafltrc
  1719. );
  1720. #endif
  1721.  
  1722. //--------------------------------------------------------------------------;
  1723. //
  1724. //  ACM Stream API's
  1725. //
  1726. //
  1727. //
  1728. //--------------------------------------------------------------------------;
  1729.  
  1730. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1731. //
  1732. //  acmStreamOpen()
  1733. //
  1734. //
  1735. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1736.  
  1737. typedef struct tACMSTREAMHEADER
  1738. {
  1739.     DWORD           cbStruct;               // sizeof(ACMSTREAMHEADER)
  1740.     DWORD           fdwStatus;              // ACMSTREAMHEADER_STATUSF_*
  1741.     DWORD           dwUser;                 // user instance data for hdr
  1742.     LPBYTE          pbSrc;
  1743.     DWORD           cbSrcLength;
  1744.     DWORD           cbSrcLengthUsed;
  1745.     DWORD           dwSrcUser;              // user instance data for src
  1746.     LPBYTE          pbDst;
  1747.     DWORD           cbDstLength;
  1748.     DWORD           cbDstLengthUsed;
  1749.     DWORD           dwDstUser;              // user instance data for dst
  1750.     DWORD           dwReservedDriver[10];   // driver reserved work space
  1751.  
  1752. } ACMSTREAMHEADER, *PACMSTREAMHEADER, FAR *LPACMSTREAMHEADER;
  1753.  
  1754. //
  1755. //  ACMSTREAMHEADER.fdwStatus
  1756. //
  1757. //  ACMSTREAMHEADER_STATUSF_DONE: done bit for async conversions.
  1758. //
  1759. #define ACMSTREAMHEADER_STATUSF_DONE        0x00010000L
  1760. #define ACMSTREAMHEADER_STATUSF_PREPARED    0x00020000L
  1761. #define ACMSTREAMHEADER_STATUSF_INQUEUE     0x00100000L
  1762.  
  1763. MMRESULT ACMAPI acmStreamOpen
  1764. (
  1765.     LPHACMSTREAM            phas,       // pointer to stream handle
  1766.     HACMDRIVER              had,        // optional driver handle
  1767.     LPWAVEFORMATEX          pwfxSrc,    // source format to convert
  1768.     LPWAVEFORMATEX          pwfxDst,    // required destination format
  1769.     LPWAVEFILTER            pwfltr,     // optional filter
  1770.     DWORD                   dwCallback, // callback
  1771.     DWORD                   dwInstance, // callback instance data
  1772.     DWORD                   fdwOpen     // ACM_STREAMOPENF_* and CALLBACK_*
  1773. );
  1774.  
  1775. #define ACM_STREAMOPENF_QUERY           0x00000001
  1776. #define ACM_STREAMOPENF_ASYNC           0x00000002
  1777. #define ACM_STREAMOPENF_NONREALTIME     0x00000004
  1778.  
  1779. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1780. //
  1781. //  acmStreamClose()
  1782. //
  1783. //
  1784. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1785.  
  1786. MMRESULT ACMAPI acmStreamClose
  1787. (
  1788.     HACMSTREAM              has,
  1789.     DWORD                   fdwClose
  1790. );
  1791.  
  1792. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1793. //
  1794. //  acmStreamSize()
  1795. //
  1796. //
  1797. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1798.  
  1799. MMRESULT ACMAPI acmStreamSize
  1800. (
  1801.     HACMSTREAM              has,
  1802.     DWORD                   cbInput,
  1803.     LPDWORD                 pdwOutputBytes,
  1804.     DWORD                   fdwSize
  1805. );
  1806.  
  1807. #define ACM_STREAMSIZEF_SOURCE          0x00000000L
  1808. #define ACM_STREAMSIZEF_DESTINATION     0x00000001L
  1809. #define ACM_STREAMSIZEF_QUERYMASK       0x0000000FL
  1810.  
  1811. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1812. //
  1813. //  acmStreamReset()
  1814. //
  1815. //
  1816. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1817.  
  1818. MMRESULT ACMAPI acmStreamReset
  1819. (
  1820.     HACMSTREAM              has,
  1821.     DWORD                   fdwReset
  1822. );
  1823.  
  1824. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1825. //
  1826. //  acmStreamMessage()
  1827. //
  1828. //
  1829. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1830.  
  1831. MMRESULT ACMAPI acmStreamMessage
  1832. (
  1833.     HACMSTREAM              has,
  1834.     UINT                    uMsg, 
  1835.     LPARAM                  lParam1,
  1836.     LPARAM                  lParam2
  1837. );
  1838.  
  1839. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1840. //
  1841. //  acmStreamConvert()
  1842. //
  1843. //
  1844. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1845.  
  1846. MMRESULT ACMAPI acmStreamConvert
  1847. (
  1848.     HACMSTREAM              has, 
  1849.     LPACMSTREAMHEADER       pash,
  1850.     DWORD                   fdwConvert
  1851. );
  1852.  
  1853. #define ACM_STREAMCONVERTF_BLOCKALIGN   0x00000004
  1854. #define ACM_STREAMCONVERTF_START        0x00000010
  1855. #define ACM_STREAMCONVERTF_END          0x00000020
  1856.  
  1857. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1858. //
  1859. //  acmStreamPrepareHeader()
  1860. //
  1861. //
  1862. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1863.  
  1864. MMRESULT ACMAPI acmStreamPrepareHeader
  1865. (
  1866.     HACMSTREAM          has,
  1867.     LPACMSTREAMHEADER   pash,
  1868.     DWORD               fdwPrepare
  1869. );
  1870.  
  1871. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1872. //
  1873. //  acmStreamUnprepareHeader()
  1874. //
  1875. //
  1876. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1877.  
  1878. MMRESULT ACMAPI acmStreamUnprepareHeader
  1879. (
  1880.     HACMSTREAM          has,
  1881.     LPACMSTREAMHEADER   pash,
  1882.     DWORD               fdwUnprepare
  1883. );
  1884.                                        
  1885.  
  1886. #ifdef __BORLANDC__
  1887. #  include <poppack.h>
  1888. #endif
  1889.  
  1890. #ifdef __cplusplus
  1891. }                       /* End of extern "C" { */
  1892. #endif  /* __cplusplus */
  1893.  
  1894. #pragma option pop
  1895. #endif  /* _INC_ACM */
  1896.